package com.hb.trade.server.project.portal.controller;

import com.hb.core.pojo.parent.PageResult;
import com.hb.core.pojo.project.portal.dto.PortalNoticeDTO;
import com.hb.core.pojo.project.portal.entity.PortalNotice;
import com.hb.trade.server.project.portal.service.PortalNoticeService;
import lombok.extern.slf4j.Slf4j;
import org.fzzn.core.model.enums.MsgEnum;
import org.fzzn.core.model.msg.Message;
import org.fzzn.core.util.IdUtil;
import org.fzzn.core.util.MsgUtil;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * <p>
 * 门户公告 前端控制器
 * </p>
 *
 * @author tian
 * @since 2022-05-25
 */
@Slf4j
@RestController
public class PortalNoticeController {

    protected final PortalNoticeService portalNoticeService;

    public PortalNoticeController(PortalNoticeService portalNoticeService){
        this.portalNoticeService = portalNoticeService;
    }

    /**
     * @Description: 门户公告查询
     *
     * @author yuezheng
     * @param portalNoticeDTO
     * @return org.fzzn.core.model.msg.Message<com.hb.core.pojo.parent.PageResult<com.hb.core.pojo.portal.entity.PortalNotice>>
     * @date 2022/5/26 13:43
     */
    @PostMapping("/portalNotice/pagePortalNoticeList")
    public Message<PageResult<PortalNotice>> pagePortalNoticeList(@RequestBody PortalNoticeDTO portalNoticeDTO){
        PageResult<PortalNotice> noticePageResult = portalNoticeService.pagePortalNoticeList(portalNoticeDTO);
        return MsgUtil.msg(noticePageResult);
    }

    /**
     * @Description: 查询公告列表
     * 门户查询相关公告
     * @author yuezheng
     * @param portalNoticeDTO
     * @return org.fzzn.core.model.msg.Message<java.util.List<com.hb.core.pojo.portal.entity.PortalNotice>>
     * @date 2022/5/26 16:04
     */
    @PostMapping("/portalNotice/listPortalNotice")
    public Message<List<PortalNotice>> listPortalNotice(@RequestBody PortalNoticeDTO portalNoticeDTO) {
        List<PortalNotice> listPortalNotice = portalNoticeService.listPortalNotice(portalNoticeDTO);
        return MsgUtil.msg(listPortalNotice);
    }


    /**
     * @Description: 门户查询公告详情
     *
     * @author yuezheng
     * @param portalNoticeDTO
     * @return org.fzzn.core.model.msg.Message<com.hb.core.pojo.portal.dto.PortalNoticeDTO>
     * @date 2022/5/26 15:14
     */
    @PostMapping("/portalNotice/findNoticeById")
    public Message<PortalNoticeDTO> findNoticeById(@RequestBody PortalNoticeDTO portalNoticeDTO){
        PortalNoticeDTO portalNotice = portalNoticeService.findNoticeById(portalNoticeDTO);
        return MsgUtil.msg(portalNotice);
    }


    /**
     * 保存门户信息（此接口也保存其他私有化平台推送的公告）
     * @author tian
     * @date 2022-5-25 16:20
     * @param portalNoticeDTO
     * @return org.fzzn.core.model.msg.Message<java.lang.Boolean>
     */
    @PostMapping("/portalNotice/savePortalNotice")
    public Message<Boolean> savePortalNotice(@RequestBody PortalNoticeDTO portalNoticeDTO) {
        portalNoticeDTO.setId(IdUtil.getId());
        boolean save = portalNoticeService.savePortalNotice(portalNoticeDTO);
        if(!save){
            log.error("同步门户数据失败 , 项目名称 is [{}]" , portalNoticeDTO.getProjectName());
        }
        return MsgUtil.success();
    }


    /**
     * 查询公告推送信息
     *
     * @author tian
     * @date 2022-5-26 16:16
     * @param portalNoticeDTO
     * @return org.fzzn.core.model.msg.Message<java.util.List<com.hb.core.pojo.portal.entity.PortalNotice>>
     */
    @PostMapping("/portalNotice/listPortalNoticeByPushStatus")
    public Message<List<PortalNoticeDTO>> listPortalNoticeByPushStatus(@RequestBody PortalNoticeDTO portalNoticeDTO) {
        List<PortalNoticeDTO> listPortalNotice = portalNoticeService.listPortalNoticeByPushStatus(portalNoticeDTO);
        return MsgUtil.msg(listPortalNotice);
    }


    /**
     * 标记推送状态为已推送
     *
     * @author tian
     * @date 2022-5-26 16:20
     * @param ids 待修改推送状态的ids
     * @return org.fzzn.core.model.msg.Message<java.util.List<com.hb.core.pojo.portal.entity.PortalNotice>>
     */
    @PostMapping("/portalNotice/updatePushStatusByIds")
    public Message<Boolean> updatePushStatusByIds(@RequestBody List<Long> ids){
        return MsgUtil.msg(portalNoticeService.updatePushStatusByIds(ids));
    }

    /**
     * 管理后台 - 分页查询公告
     *
     * @param portalNoticeDTO
     * @return
     */
    @PostMapping("/portalNotice/pagePortalNoticeList4Manager")
    Message<PageResult<PortalNoticeDTO>> pagePortalNoticeList4Manager(@RequestBody PortalNoticeDTO portalNoticeDTO){
        PageResult<PortalNoticeDTO> noticePageResult = portalNoticeService.pagePortalNoticeList4Manager(portalNoticeDTO);
        return MsgUtil.msg(noticePageResult);
    }

    /**
     * 管理后台 - 删除公告
     *
     * @param portalNoticeDTO
     * @return
     */
    @PostMapping("/portalNotice/delPortalNotice")
    Message<Boolean> delPortalNotice(@RequestBody PortalNoticeDTO portalNoticeDTO){
        portalNoticeService.delPortalNotice(portalNoticeDTO);

        return MsgUtil.msg(MsgEnum.SUCCESS);
    }

    /**
     * 新增/编辑公告
     * 保存通用接口
     *
     * @param portalNoticeDTO
     * @return
     */
    @PostMapping("/portalNotice/savePortalNotice4Manager")
    Message<Boolean> savePortalNotice4Manager(@RequestBody PortalNoticeDTO portalNoticeDTO){
        portalNoticeService.savePortalNotice4Manager(portalNoticeDTO);

        return MsgUtil.msg(MsgEnum.SUCCESS);
    }
}
